// 声明该类所在的包名，此包通常用于存放适配器相关的类 
package com.example.myapplication01.chapter09.adapter;

// 导入安卓的上下文类，用于访问应用程序的资源和类 
import android.content.Context;
// 导入布局填充器类，用于将 XML 布局文件转换为视图对象 
import android.view.LayoutInflater;
// 导入视图类，是所有 UI 组件的基类 
import android.view.View;
// 导入视图组类，是视图的容器，可包含其他视图 
import android.view.ViewGroup;
// 导入按钮类，用于创建可点击的按钮 
import android.widget.Button;
// 导入图像视图类，用于显示图片 
import android.widget.ImageView;
// 导入单选按钮类，用于创建单选选项 
import android.widget.RadioButton;
// 导入单选按钮组类，用于管理一组单选按钮 
import android.widget.RadioGroup;
import android.widget.Toast;
// 导入非空注解，用于标记参数或返回值不能为空 
import androidx.annotation.NonNull;
// 导入 ViewPager 的适配器基类，用于为 ViewPager 提供数据和视图 
import androidx.viewpager.widget.PagerAdapter;

// 导入 ArrayList 类，用于创建动态数组 
import com.example.myapplication01.R;

import java.util.ArrayList;
// 导入 List 接口，是集合框架的一部分，用于存储有序的元素 
import java.util.List;

/**
 * 自定义的引导页适配器类，继承自 PagerAdapter 
 * 用于为 ViewPager 提供引导页的视图和数据 
 */
public class LaunchSimpleAdapter extends PagerAdapter {
    // 用于存储引导页的视图列表 
    private List<View> mViewList = new ArrayList<>();

    /**
     * 引导页适配器的构造方法 
     * @param context 上下文对象，用于访问应用程序的资源和类 
     * @param imageArray 图片资源 ID 数组，包含引导页要显示的图片资源 
     */
    public LaunchSimpleAdapter(Context context, int[] imageArray) {
        // 遍历图片数组，为每个图片创建一个引导页视图 
        for (int i = 0; i < imageArray.length;  i++) {
            // 使用布局填充器将 item_launch 布局文件转换为视图对象 
            View view = LayoutInflater.from(context).inflate(R.layout.item_launch,  null);
            // 从视图中查找 ImageView 控件，用于显示引导页的图片 
            ImageView iv_launch = view.findViewById(R.id.iv_launch);
            // 从视图中查找 RadioGroup 控件，用于显示引导页的指示器 
            RadioGroup rg_indicate = view.findViewById(R.id.rg_indicate);
            // 从视图中查找 Button 控件，用于作为进入主页的入口按钮 
            Button btn_start = view.findViewById(R.id.btn_start);

            // 将当前图片资源 ID 设置给 ImageView 控件，显示对应的图片 
            iv_launch.setImageResource(imageArray[i]);

            // 为每个引导页创建一组对应的单选按钮作为指示器 
            for (int j = 0; j < imageArray.length;  j++) {
                // 创建一个新的单选按钮 
                RadioButton radio = new RadioButton(context);
                // 设置单选按钮的布局参数，使其宽度和高度根据内容自适应 
                radio.setLayoutParams(new ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.WRAP_CONTENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT
                ));
                // 设置单选按钮的内边距 
                radio.setPadding(10,  10, 10, 10);
                // 将单选按钮添加到 RadioGroup 中 
                rg_indicate.addView(radio);
            }

            // 将当前引导页对应的单选按钮设置为选中状态，实现高亮显示 
            ((RadioButton) rg_indicate.getChildAt(i)).setChecked(true);

            // 判断是否为最后一个引导页 
            if (i == imageArray.length  - 1) {
                // 如果是最后一个引导页，显示入口按钮 
                btn_start.setVisibility(View.VISIBLE);
                // 为入口按钮设置点击监听器 
                btn_start.setOnClickListener(v  -> {
                    // 当点击入口按钮时，使用自定义的 Toast 工具类显示提示信息 

                    Toast.makeText(context,"欢迎您开启美好生活",Toast.LENGTH_SHORT).show();
                });
            }
            // 将创建好的引导页视图添加到视图列表中 
            mViewList.add(view);
        }
    }

    /**
     * 返回引导页的数量 
     * @return 视图列表的大小，即引导页的数量 
     */
    @Override
    public int getCount() {
        return mViewList.size();
    }

    /**
     * 判断视图是否与对象相关联 
     * @param view 要判断的视图 
     * @param object 要判断的对象 
     * @return 如果视图和对象是同一个，则返回 true，否则返回 false 
     */
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    /**
     * 创建指定位置的引导页视图，并将其添加到 ViewPager 中 
     * @param container ViewPager 容器 
     * @param position 引导页的位置 
     * @return 创建好的引导页视图对象
     */
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        // 从视图列表中获取指定位置的引导页视图 
        View item = mViewList.get(position);
        // 将引导页视图添加到 ViewPager 容器中 
        container.addView(item);
        // 返回引导页视图对象 
        return item;
    }

    /**
     * 销毁指定位置的引导页视图，将其从 ViewPager 中移除 
     * @param container ViewPager 容器 
     * @param position 引导页的位置 
     * @param object 要销毁的视图对象 
     */
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        // 从 ViewPager 容器中移除指定位置的引导页视图 
        container.removeView(mViewList.get(position));
    }
} 